前一篇在進行 knn 搜尋的時候,發現了非常不合理的搜尋結果:
當搜尋『黑道家族勾心鬥角』時,最相似的電影居然是溫馨家庭喜劇;再加上前面幾筆內容不同但相似性分數都蠻相近的,做了兩個可能的問題假設:
sentence-transformers/all-MiniLM-L6-v2
的限制是 128 個)在 hugging-face 的論壇貼文上,說明這個 model 一開始確實是以英文為主,後續才會轉換成其他語言(但目前沒有找到確實有支援其他語言的說明)。
因此找了另外一個確實說明有支援多語言的模型:intfloat/multilingual-e5-small
作為 word vector 翻譯器,使用一樣的 query 得到第一筆是
『精銳部隊』:巴西本土票房累積收益,突破千萬美金大關 。貪污腐敗的巴西,警察個個以權謀私,無法無天的毒販霸據整個貧民窟,導致黑白兩道利益輸送關係錯綜複雜。直到教宗即將造訪,精銳部隊隊長納西門圖奉命橫掃貧民窟毒梟。速戰速決以換取短暫的和平,取勝的捷徑,就是以暴制暴。(後略)
感覺合理很多。
但當我們繼續往下看,第二筆結果
『羅生門』:本片故事發生在戰亂、天災、疾病連綿不斷的平安朝代。某日,在都城附近大澤中發現武士金澤武弘被殺,被控殺害的盜賊多襄丸,武弘之妻真砂,召喚武弘靈魂的靈媒、目擊證人行腳僧及發現金澤屍體的樵夫殼等人以四個不同的時間,不同的方式各自說出供詞,片中幾位要角表現十分稱職,對白精湛,耐人尋味。主要關係者在劇中各懷不同之想法,觀眾在觀賞本片之餘,不妨仔細探究一番。(後略)
雖然是有一些燒殺擄掠,但完全不是黑幫,也沒有勾心鬥角啊 QQ
雖然 intfloat/multilingual-e5-small
(後簡稱 e5-small)的結果顯著比 sentence-transformers/all-MiniLM-L6-v2
(後簡稱 L6-v2)好,但 e5-small 的 token 限制是 512,是 L6-v2 的 4 倍;所以究竟是模型對語言的支援程度問題還是 token 數問題,還是很難說。
KNN query 也可以搭配全文搜索來調整最終結果,下一篇會開始嘗試可以怎麼做結合。
補充資訊:
其實有針對這兩個模型做了一個簡單的測試想排除 token 長度的因素,但基於我對 word vector 知識的限制,還是很難判斷到底原因是什麼,所以就不放在正文內。
實驗的想法是這樣的:在英文和中文都挑選兩句完全不相關的短字句(排除 token 限制因素),分別用兩個模型轉換成各自的 word vector,若模型沒有提供對中文的支援,則應該會認為這兩句話很相近(因為沒有用這個語料訓練應該都看不懂)。
實驗的結果如下:
中文實驗語句:
sentence-transformers/all-MiniLM-L6-v2
:a 距離自己是 0.9998,距離 b 是 0.7741
intfloat/multilingual-e5-small
: a 距離自己是 0.9999,距離 b 是 0.9333
英文實驗語句:
c. 『Warm and touching family comedy**』**
d. 『Mafia gang intrigues**』**
sentence-transformers/all-MiniLM-L6-v2
: c 距離自己是 0.9999,距離 d 是 0.5882
intfloat/multilingual-e5-small
: c 距離自己是 0.9999,距離 d 是 0.9111
基於這兩個模型是完全不同的東西,他們的 similarity 分數是不能比較的,所以也不知道該怎麼辦,如果有人看到這,歡迎給我一些除錯的建議。